<template>
	<n-form size="small">
		<n-radio-group v-model:value="radioValue">
			<n-form-item>
				<n-radio :value="1">
					分钟，允许的通配符[, - * /]
				</n-radio>
			</n-form-item>

			<n-form-item>
				<n-radio :value="2">
					周期从

				</n-radio>
				<n-input-number v-model:value="cycle01" :min="0" :max="58" /> -
				<n-input-number v-model:value="cycle02" :min="cycle01 ? cycle01 + 1 : 1" :max="59" /> 分钟
			</n-form-item>

			<n-form-item>
				<n-radio :value="3">
					从

				</n-radio>
				<n-input-number v-model:value="average01" :min="0" :max="58" /> 分钟开始，每
				<n-input-number v-model:value="average02" :min="1" :max="59 - average01 || 0" /> 分钟执行一次
			</n-form-item>

			<n-form-item>
				<n-radio :value="4">
					指定

				</n-radio>
				<n-select clearable v-model:value="checkboxList" :options="list60" placeholder="可多选" multiple style="width:100%">
					
				</n-select>
			</n-form-item>
		</n-radio-group>

	</n-form>

</template>

<script>
	export default {
		data() {
			return {
				radioValue: 1,
				cycle01: 1,
				cycle02: 2,
				average01: 0,
				average02: 1,
				checkboxList: [],
				checkNum: this.check
			}
		},
		name: 'crontab-min',
		props: ['check', 'cron'],
		methods: {
			
			// 单选按钮值变化时
			radioChange() {
				switch (this.radioValue) {
					case 1:
						this.$emit('update', 'min', '*', 'min');
						break;
					case 2:
						this.$emit('update', 'min', this.cycleTotal, 'min');
						break;
					case 3:
						this.$emit('update', 'min', this.averageTotal, 'min');
						break;
					case 4:
						this.$emit('update', 'min', this.checkboxString, 'min');
						break;
				}
			},
			// 周期两个值变化时
			cycleChange() {
				if (this.radioValue == '2') {
					this.$emit('update', 'min', this.cycleTotal, 'min');
				}
			},
			// 平均两个值变化时
			averageChange() {
				if (this.radioValue == '3') {
					this.$emit('update', 'min', this.averageTotal, 'min');
				}
			},
			// checkbox值变化时
			checkboxChange() {
				if (this.radioValue == '4') {
					this.$emit('update', 'min', this.checkboxString, 'min');
				}
			},

		},
		watch: {
			'radioValue': 'radioChange',
			'cycleTotal': 'cycleChange',
			'averageTotal': 'averageChange',
			'checkboxString': 'checkboxChange',
		},
		computed: {
			list60() {
				let list = []
				for (let i = 0; i < 60; i++) {
					list.push({
						label: i,
						value: i
					})
				}
				return list
			},
			// 计算两个周期值
			cycleTotal: function() {
				const cycle01 = this.checkNum(this.cycle01, 0, 58)
				const cycle02 = this.checkNum(this.cycle02, cycle01 ? cycle01 + 1 : 1, 59)
				return cycle01 + '-' + cycle02;
			},
			// 计算平均用到的值
			averageTotal: function() {
				const average01 = this.checkNum(this.average01, 0, 58)
				const average02 = this.checkNum(this.average02, 1, 59 - average01 || 0)
				return average01 + '/' + average02;
			},
			// 计算勾选的checkbox值合集
			checkboxString: function() {
				let str = this.checkboxList.join();
				return str == '' ? '*' : str;
			}
		}
	}
</script>